package org.sword.wechat4j;

import org.sword.wechat4j.driver.EventDriverI;
import org.sword.wechat4j.driver.MessageDriverI;
import org.sword.wechat4j.request.BaseMessage;

/**
 * 微信核心协处理,用于提前设置微信消息的处理方式，
 * 在微信核心实例化时注入构造器，使用需要实现  before()，当然没什么要做的方法留空即可。
 *
 * 还需要实现消息处理和事件处理驱动的设置，方法必须返回响应的驱动类型，如果不使用此协处理
 * 可以直接调用微信核心的setDriver()方法，如果两种方式都使用了，那么最后对驱动的修改生效。
 * Created by wxc on 2016/8/24.
 */
public abstract class Coprocessor {

    protected String token;

    protected MessageDriverI messageDriverI;

    protected EventDriverI eventDriverI;

    /**
     * 消息前置处理
     * @param message 微信请求的消息
     */
    public abstract void before(BaseMessage message);

    /**
     * 设置消息驱动
     * @return 消息
     */
    public MessageDriverI getMessageDriver() {
        return messageDriverI;
    }

    /**
     * 设置事件驱动
     * @return 事件
     */
    public EventDriverI getEventDriver() {
        return eventDriverI;
    }

    public String getToken() {
        return token;
    }
}
